package com.offcn.sellergood.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.offcn.entity.PageResult;
import com.offcn.sellergood.pojo.Brand;
import com.offcn.sellergood.dao.BrandMapper;
import com.offcn.sellergood.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.Map;

/**
 * @Author: zola
 * @Date: 2021/9/7 - 09 - 07 - 20:06
 * @Description: com.offcn.sellergood.service.impl
 * @Version: 1.0
 */
@Service
public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements BrandService {

    @Autowired
    private BrandMapper brandMapper;

    /**
     * @param: Long id
     * @return: Brand
     * @description: 主键查询：T getById(Serializable id)：根据 ID 查询
     */
    @Override
    public Brand findById(Long id) {
        Brand brand = this.getById(id);
        return brand;
    }

    /**
     * @param: null
     * @return: List<Brand>
     * @description: 查询所有：List<T> list();
     */
    @Override
    public List<Brand> findAll() {
        return this.list();
    }

    /**
     * @param: Brand brand
     * @return: null
     * @description: 添加：boolean save(T entity): 插入单条数据，实际调用的是BaseMapper的insert
     */
    @Override
    public void insert(Brand brand) {
        this.save(brand);
    }

    /**
     * @param: Brand brand
     * @return: null
     * @description: 修改：boolean updateById(T entity)：根据 ID 选择修改
     */
    @Override
    public void update(Brand brand) {
        this.updateById(brand);
    }

    /**
     * @param: Long id
     * @return: null
     * @description:  删除：boolean removeById(Serializable id)：根据 ID 删除
     * 实际调用的是BaseMapper中的相关delete方法。
     */
    @Override
    public void delete(Long id) {
        this.removeById(id);
    }

    /**
     * @param: Brand brand
     * @return: List<Brand>
     * @description: 模糊查询：List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
     * 根据条件构造器查询全部记录，用实体类封装数据
     */
    @Override
    public List<Brand> findList(Brand brand) {
        QueryWrapper<Brand> wrapper = new QueryWrapper<>();
        if(brand != null){
            /*if(brand.getId() != null){
                wrapper.eq("id",brand.getId());
            }*/
            if (!StringUtils.isEmpty(brand.getName())){
                wrapper.like("name",brand.getName());
            }
            if (!StringUtils.isEmpty(brand.getFirstChar())){
                wrapper.eq("first_char",brand.getFirstChar());
            }
            if (!StringUtils.isEmpty(brand.getImage())){
                wrapper.eq("image",brand.getImage());
            }
        }
        return brandMapper.selectList(wrapper);
    }

    /**
     * @param: int pageNumber, int pageSize
     * @return: PageResult<Brand>
     * @description: 分页查询：<E extends IPage<T>> E page(E page):不带条件分页查询
     * 根据条件构造器，不带查询条件，查询全部记录，用实体类封装数据
     */
    @Override
    public PageResult<Brand> findPage(int pageNumber, int pageSize) {
        Page<Brand> iPage = new Page<>(pageNumber,pageSize);
        Page<Brand> page = this.page(iPage,new QueryWrapper<>());
        return new PageResult<>(page.getTotal(),page.getRecords());
    }

    /**
     * @param: Brand brand, int pageNo, int pageSize
     * @return: PageResult<Brand>
     * @description: 分页查询：<E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper)：携带条件
     * 根据条件构造器，携带查询条件，查询全部记录，用实体类封装数据
     */
    @Override
    public PageResult<Brand> findPage(Brand brand, int pageNumber, int pageSize) {
        Page<Brand> iPage = new Page<>(pageNumber,pageSize);
        QueryWrapper<Brand> wrapper = new QueryWrapper();
        if(brand != null){
            /*if(brand.getId() != null){
                wrapper.eq("id",brand.getId());
            }*/
            if (!StringUtils.isEmpty(brand.getName())){
                wrapper.like("name",brand.getName());
            }
            if (!StringUtils.isEmpty(brand.getFirstChar())){
                wrapper.eq("first_char",brand.getFirstChar());
            }
            if (!StringUtils.isEmpty(brand.getImage())){
                wrapper.eq("image",brand.getImage());
            }
        }
        Page<Brand> page = this.page(iPage, wrapper);
        return new PageResult<>(page.getTotal(),page.getRecords());
    }

    /**
     * @param: null
     * @return: List<Map>
     * @description: 查询品牌下拉列表
     */
    @Override
    public List<Map> selectOptions() {
        return brandMapper.selectOptions();
    }

}
